home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / ip / nfs / nfstrace.shar.Z / nfstrace.shar / nfsyacc.y < prev    next >
Encoding:
Lex Description  |  1992-02-06  |  6.4 KB  |  342 lines

  1. %{
  2. /*
  3.  * YACC Grammar for nfstrace
  4.  * 11/91
  5.  * Copyright 1991 Matt Blaze.
  6.  * May be freely reproduced for non-commerical use.
  7.  * All other rights, including use for direct commerical advantage or
  8.  * use in a commerical product, are reserved by the author.
  9.  */
  10. #include <stdio.h>
  11. #include "nfsstuff.h"
  12.  
  13. line l;
  14.  
  15. typedef char str[1024];
  16. #define NFIELDS 64
  17.  
  18. str strings[NFIELDS];
  19.  
  20. int field=0;
  21. int nfields;
  22. extern FILE *fd;
  23.  
  24. %}
  25.  
  26. %token NL FS OPEN CLOSE COMMA
  27. %token OK FAILED
  28. %token PROC_NULL PROC_GETATTR PROC_SETATTR PROC_ROOT PROC_LOOKUP PROC_READLINK PROC_READ
  29. %token PROC_WRITECACHE PROC_WRITE PROC_CREAT PROC_REMOVE PROC_RENAME PROC_LINK
  30. %token PROC_SYMLINK PROC_MKDIR PROC_RMDIR PROC_READDIR PROC_STATFS
  31. %token STRING COMMENT
  32.  
  33. %start lines
  34.  
  35. %%
  36.  
  37.  
  38. lines    :
  39.     | lines line
  40.     ;
  41.  
  42. line    : NL
  43.     | COMMENT NL            { fprintf(fd,"#%s\n",strings[$1]);
  44.                        fflush(fd);
  45.                        reset(); }
  46.     | op NL                { do_operation();reset(); }
  47.     | error NL            { fprintf(stderr,"BAD line\n");reset();}
  48.     ;
  49.  
  50. op    : hdr FS proc_null
  51.     | hdr FS proc_getattr
  52.     | hdr FS proc_setattr
  53.     | hdr FS proc_root
  54.     | hdr FS proc_lookup
  55.     | hdr FS proc_readlink
  56.     | hdr FS proc_read
  57.     | hdr FS proc_writecache
  58.     | hdr FS proc_write
  59.     | hdr FS proc_creat
  60.     | hdr FS proc_remove
  61.     | hdr FS proc_rename
  62.     | hdr FS proc_link
  63.     | hdr FS proc_symlink
  64.     | hdr FS proc_mkdir
  65.     | hdr FS proc_rmdir
  66.     | hdr FS proc_readdir
  67.     | hdr FS proc_statfs
  68.     ;
  69.  
  70. hdr    : timestamp FS server FS client { l.time = strings[$1];
  71.                       l.svr = strings[$3];
  72.                       l.cln = strings[$5]; }
  73.     ;
  74.  
  75. timestamp : STRING            { $$ = $1; }
  76.     ;
  77.  
  78. server    : STRING            { $$ = $1; }
  79.     ;
  80.  
  81. client    : STRING            { $$ = $1; }
  82.     ;
  83.  
  84. proc_null : PROC_NULL FS call_null FS reply_null
  85.                     { l.op = RFS_NULL; }
  86.     ;
  87.  
  88. proc_getattr : PROC_GETATTR FS call_getattr FS reply_getattr
  89.                     { l.op = RFS_GETATTR; }
  90.     ;
  91.  
  92. proc_setattr : PROC_SETATTR FS call_setattr FS reply_setattr
  93.                     { l.op = RFS_SETATTR; }
  94.     ;
  95.  
  96. proc_root : PROC_ROOT FS call_root FS reply_root
  97.                     { l.op = RFS_ROOT; }
  98.     ;
  99.  
  100. proc_lookup : PROC_LOOKUP FS call_lookup FS reply_lookup
  101.                     { l.op = RFS_LOOKUP; }
  102.     ;
  103.  
  104. proc_readlink : PROC_READLINK FS call_readlink FS reply_readlink
  105.                     { l.op = RFS_READLINK; }
  106.     ;
  107.  
  108. proc_read : PROC_READ FS call_read FS reply_read
  109.                     { l.op = RFS_READ; }
  110.     ;
  111.  
  112. proc_writecache : PROC_WRITECACHE FS call_writecache FS reply_writecache
  113.                     { l.op = RFS_WRITECACHE;}
  114.     ;
  115.  
  116. proc_write : PROC_WRITE FS call_write FS reply_write    
  117.                     { l.op = RFS_WRITE; }
  118.     ;
  119.  
  120. proc_creat : PROC_CREAT FS call_creat FS reply_creat
  121.                     { l.op = RFS_CREATE; }
  122.     ;
  123.  
  124. proc_remove : PROC_REMOVE FS call_remove FS reply_remove
  125.                     { l.op = RFS_REMOVE; }
  126.     ;
  127.  
  128. proc_rename : PROC_RENAME FS call_rename FS reply_rename
  129.                     { l.op = RFS_RENAME; }
  130.     ;
  131.  
  132. proc_link : PROC_LINK FS call_link FS reply_link
  133.                     { l.op = RFS_LINK; }
  134.     ;
  135.  
  136. proc_symlink : PROC_SYMLINK FS call_symlink FS reply_symlink
  137.                     { l.op = RFS_SYMLINK; }
  138.     ;
  139.  
  140. proc_mkdir : PROC_MKDIR FS call_mkdir FS reply_mkdir
  141.                     { l.op = RFS_MKDIR; }
  142.     ;
  143.  
  144. proc_rmdir : PROC_RMDIR FS call_rmdir FS reply_rmdir
  145.                     { l.op = RFS_RMDIR; }
  146.     ;
  147.  
  148. proc_readdir : PROC_READDIR FS call_readdir FS reply_readdir
  149.                     { l.op = RFS_READDIR; }
  150.     ;
  151.  
  152. proc_statfs : PROC_STATFS FS call_statfs FS reply_statfs
  153.                     { l.op = RFS_STATFS; }
  154.     ;
  155.  
  156.  
  157. call_null :
  158.     ;
  159.  
  160. reply_null :
  161.     ;
  162.  
  163. call_getattr : fhandle            { l.call.handle1 = strings[$1]; }
  164.     ;
  165.  
  166. reply_getattr : FAILED            { l.stat = 0; }
  167.     | OK COMMA fattr        { l.stat = 1; }
  168.     ;
  169.  
  170. call_setattr : OPEN fhandle COMMA sattr CLOSE { l.call.handle1 = strings[$2]; }
  171.     ;
  172.  
  173. reply_setattr : FAILED            { l.stat = 0; }
  174.     | OK COMMA fattr        { l.stat = 1; }
  175.     ;
  176.  
  177. call_root :
  178.     ;
  179.  
  180. reply_root :
  181.     ;
  182.  
  183. call_lookup : diropargs
  184.     ;
  185.  
  186. reply_lookup : FAILED            { l.stat = 0; }
  187.     | OK COMMA diropres        { l.stat = 1; }
  188.     ;
  189.  
  190. call_readlink : fhandle            { l.call.handle1 = strings[$1]; }
  191.     ;
  192.  
  193. reply_readlink : FAILED            { l.stat = 0; }
  194.     | OK COMMA STRING        { l.stat = 1;
  195.                       l.reply.name = strings[$2]; }
  196.     ;
  197.  
  198. call_read : OPEN fhandle COMMA STRING COMMA STRING CLOSE     {
  199.                     l.call.handle1 = strings[$2];
  200.                     l.call.offset = strings[$4];
  201.                     l.call.count = strings[$6]; }
  202.     ;
  203.  
  204. reply_read : FAILED            { l.stat = 0; }
  205.     | OK COMMA STRING        { l.stat = 1;
  206.                       l.reply.count = strings[$3]; }
  207.  
  208. call_writecache :
  209.     ;
  210.  
  211. reply_writecache :
  212.     ;
  213.  
  214. call_write : OPEN fhandle COMMA STRING COMMA STRING CLOSE     {
  215.                     l.call.handle1 = strings[$2];
  216.                     l.call.offset = strings[$4];
  217.                     l.call.count = strings[$6]; }
  218.     ;
  219.  
  220. reply_write : FAILED            { l.stat = 0; }
  221.     | OK COMMA fattr        { l.stat = 1; }
  222.     ;
  223.  
  224. call_creat : OPEN fhandle COMMA STRING COMMA sattr CLOSE     {
  225.                     l.call.handle1 = strings[$2];
  226.                     l.call.name1 = strings[$4]; }
  227.     ;
  228.  
  229. reply_creat : FAILED            { l.stat = 0; }
  230.     | OK COMMA OPEN fhandle COMMA fattr CLOSE     {
  231.                     l.stat = 1;
  232.                     l.reply.handle = strings[$4]; }
  233.     ;
  234.  
  235. call_remove : diropargs
  236.     ;
  237.  
  238. reply_remove : FAILED            { l.stat = 0; }
  239.     | OK                { l.stat = 1; }
  240.     ;
  241.  
  242. call_rename : diropargs COMMA diropargs2
  243.     ;
  244.  
  245. reply_rename: FAILED            { l.stat = 0; }
  246.     | OK                { l.stat = 1; }
  247.     ;
  248.  
  249. call_link : OPEN fhandle COMMA diropargs2 CLOSE {
  250.                     l.call.handle1 = strings[$2]; }
  251.     ;
  252.  
  253. reply_link : FAILED            { l.stat = 0; }
  254.     | OK                { l.stat = 1; }
  255.     ;
  256.  
  257. call_symlink : OPEN diropargs COMMA STRING COMMA sattr CLOSE {
  258.                     l.call.name2 = strings[$4]; }
  259.     ;
  260.  
  261. reply_symlink : FAILED            { l.stat = 0; }
  262.     | OK                { l.stat = 1; }
  263.     ;
  264.  
  265. call_mkdir : OPEN fhandle COMMA STRING COMMA sattr CLOSE {
  266.                     l.call.handle1 = strings[$2];
  267.                     l.call.name1 = strings[$4]; }
  268.     ;
  269.  
  270. reply_mkdir : FAILED            { l.stat = 0; }
  271.     | OK COMMA OPEN fhandle COMMA fattr CLOSE  {
  272.                     l.stat = 1;
  273.                     l.reply.handle = strings[$4]; }
  274.     ;
  275.  
  276. call_rmdir : diropargs
  277.     ;
  278.  
  279. reply_rmdir : FAILED            { l.stat = 0; }
  280.     | OK                { l.stat = 1; }
  281.     ;
  282.  
  283. call_readdir : fhandle
  284.     ;
  285.  
  286. reply_readdir : FAILED
  287.     | OK
  288.     ;
  289.  
  290. call_statfs :
  291.     ;
  292.  
  293. reply_statfs :
  294.     ;
  295.  
  296. fhandle : STRING            { $$ = $1; }
  297.     ;
  298.  
  299. diropargs : OPEN fhandle COMMA STRING CLOSE {
  300.                     l.call.handle1 = strings[$2];
  301.                     l.call.name1 = strings[$4]; }
  302.     ;
  303.  
  304. diropargs2 : OPEN fhandle COMMA STRING CLOSE {
  305.                     l.call.handle2 = strings[$2];
  306.                     l.call.name2 = strings[$4]; }
  307.     ;
  308.  
  309. fattr : OPEN STRING COMMA STRING COMMA STRING COMMA STRING CLOSE {
  310.                     l.reply.mode = strings[$2];
  311.                     l.reply.uid = strings[$4];
  312.                     l.reply.size = strings[$6]; }
  313.     ;
  314.  
  315. sattr : OPEN STRING COMMA STRING COMMA STRING CLOSE {
  316.                     l.call.mode = strings[$2];
  317.                     l.call.uid = strings[$4];
  318.                     l.call.size = strings[$6]; }
  319.     ;
  320.  
  321. diropres : OPEN fhandle COMMA fattr CLOSE {
  322.                     l.reply.handle = strings[$2]; }
  323.     ;
  324.  
  325.  
  326. %%
  327. addstring(s)
  328.      char *s;
  329. {
  330.     strcpy(strings[field],s);
  331.     strings[field];
  332.     return (field++);
  333. }
  334.  
  335. reset()
  336. {
  337.     field=0;
  338. }
  339.  
  340.  
  341. #include "lex.yy.c"
  342.